
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
 */
package objects;

//~--- JDK imports ------------------------------------------------------------

import java.util.ArrayList;

/**
 *
 * @author stevenrx
 */
public class RutaAlterna {
    private ArrayList<Actividad> actividades = new ArrayList<Actividad>();
    private double               cocienteAlfa;
    private float                coeficienteTotal;
    private int                  numeroActividadesPertenecenARutaCritica;
    private Proyecto             owner;    // Proyecto desde el cualesta ruta alterna es derivada.

    public RutaAlterna(Proyecto owner) {
        this.owner                              = owner;
        coeficienteTotal                        = 0.0f;
        numeroActividadesPertenecenARutaCritica = 1;
    }

    public void incrementarActividades() {
        numeroActividadesPertenecenARutaCritica++;
    }

    private void calcularAlfa() {
        this.cocienteAlfa = coeficienteTotal / numeroActividadesPertenecenARutaCritica;

        double sumK = 0d;    // Variable que contiene la sumatoria final de los k-ésimos productos, entre la proporción de actividades de una ruta alterna, con respecto a la proporción del total de rutas del proyecto.
        double subProducto1 = 1d;
        double subProducto2 = 1d;
        double cociente_1   = 1d;
        double cociente_2   = 1d;
        double suma_1       = 0d;
        double suma_2       = 0d;

        for (int k = 0; k < owner.getRestriccionesArray().length; k++) {
            for (Actividad alternaAct : actividades) {
                subProducto1 = (alternaAct.getRestricciones().get(k).getRestriccion()) * (alternaAct.getDuracion());
                suma_1       += subProducto1;
            }

            cociente_1 = suma_1 / owner.getRestriccionesArray()[k];

            for (Actividad actProyecto : owner.getActividadesProyecto()) {
                subProducto2 = (actProyecto.getRestricciones().get(k).getRestriccion()) * (actProyecto.getDuracion());
                suma_2       += subProducto2;
            }

            cociente_2 = suma_2 / owner.getRestriccionesArray()[k];
            sumK       += (cociente_1 * cociente_2);
        }

        this.cocienteAlfa = sumK;
    }

    public void culminarRutaAlterna() {
        for (Actividad a : actividades) {
            coeficienteTotal += a.getProporcionGlobal();
        }

        calcularAlfa();
    }

    public ArrayList<Actividad> getActividades() {
        return actividades;
    }

    public void setActividades(ArrayList<Actividad> actividades) {
        this.actividades = actividades;
    }

    public double getCocienteAlfa() {
        return cocienteAlfa;
    }

    public void setCocienteAlfa(double cocienteAlfa) {
        this.cocienteAlfa = cocienteAlfa;
    }

    public float getCoeficienteTotal() {
        return coeficienteTotal;
    }

    public void setCoeficienteTotal(float coeficienteTotal) {
        this.coeficienteTotal = coeficienteTotal;
    }

    public int getnumeroActividadesPertenecenARutaCritica() {
        return numeroActividadesPertenecenARutaCritica;
    }

    public void setnumeroActividadesPertenecenARutaCritica(int numeroActividadesPertenecenARutaCritica) {
        this.numeroActividadesPertenecenARutaCritica = numeroActividadesPertenecenARutaCritica;
    }
}
